package com.org.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;


//@WebListener()
//如果使用 Servlet3.0 以上版本，监听器的配置可以直接在代码中通过注解来完成，无需在 web.xml 中再配置
public class SessionListener implements ServletContextListener,
        HttpSessionListener, HttpSessionAttributeListener {
    public int count = 0;//记录session的数量

    public SessionListener() {
    }

    /**
     * contextInitialized()用于监听ServletContext对象的创建.
     * * 该方法在ServletContext对象创建后被调用.
     */
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Web应用即将启动......");
    }

    /**
     * contextDestroyed()用于监听ServletContext对象的销毁.
     * * 该方法在ServletContext对象销毁前被调用.
     */
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("Web应用即将关闭......");
    }


    /**
     * sessionCreated()用于监听Session对象的创建.
     */

    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("新创建了一个session......");
        count++;
//        se.getSession().getServletContext().setAttribute("SessionCount", count);
//        System.out.println(se.getSession().getServletContext().getAttribute("SessionCount"));
    }

    /**
     * sessionDestroyed()用于监听Session对象的销毁.
     * * 该方法在Session对象销毁前被调用.
     */
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("销毁了一个session......");
        count--;
//        se.getSession().getServletContext().setAttribute("SessionCount", count);
//        System.out.println(se.getSession().getServletContext().getAttribute("SessionCount"));
    }


    public void attributeAdded(HttpSessionBindingEvent sbe) {
        System.out.println("新增加了一个attribute......");
    }

    public void attributeRemoved(HttpSessionBindingEvent sbe) {
        System.out.println("去除了一个attribute......");
    }

    public void attributeReplaced(HttpSessionBindingEvent sbe) {
        System.out.println("替换了一个attribute......");
    }


}
